home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / x68000.arc / SOURCE.ARC / SYNTAXAN.DEF < prev    next >
Text File  |  1986-01-21  |  3KB  |  73 lines

  1. DEFINITION MODULE SyntaxAnalyzer;
  2. (* Analyzes the operands to provide information for CodeGenerator *)
  3.  
  4.    FROM LongNumbers IMPORT
  5.       LONG;
  6.  
  7.    FROM Parser IMPORT
  8.       OPERAND;
  9.  
  10.  
  11.    EXPORT QUALIFIED
  12.       SizeType, OpConfig, OpMode, Xtype,         (*      TYPEs       *)
  13.       GetValue, GetSize,                         (*    PROCEDURE's   *)
  14.       GetInstModeSize, GetOperand, GetMultReg;   (*    PROCEDURE's   *)
  15.  
  16.  
  17.    TYPE
  18.       OpMode = (DReg,      (* Data Register *)
  19.                 ARDir,     (* Address Register Direct *)
  20.                 ARInd,     (* Address Register Indirect *)
  21.                 ARPost,    (* Address Register with Post-Increment *)
  22.                 ARPre,     (* Address Register with Pre-Decrement *)
  23.                 ARDisp,    (* Address Register with Displacement *)
  24.                 ARDisX,    (* Address Register with Disp. & Index *)
  25.                 AbsW,      (* Absolute Word (16-bit Address) *)
  26.                 AbsL,      (* Absolute Word (32-bit Address) *)
  27.                 PCDisp,    (* Program Counter Relative, with Displacement *)
  28.                 PCDisX,    (* Program Counter Relative, with Disp. & Index *)
  29.                 Imm,       (* Immediate *)
  30.                 MultiM,    (* Multiple Register Move *)
  31.                 SR,        (* Status Register *)
  32.                 CCR,       (* Condition Code Register *)
  33.                 USP,       (* User's Stack Pointer *)
  34.                 Null);     (* Error Condition, or Operand missing *)
  35.  
  36.       Xtype = (X0, Dreg, Areg);
  37.       SizeType = (S0, Byte, Word, S3, Long);
  38.  
  39.       OpConfig = RECORD                 (* OPERAND CONFIGURATION *)
  40.                     Mode : OpMode;
  41.                     Value : LONG;
  42.                     Loc : CARDINAL;     (* Location of Operand on line *)
  43.                     Rn : CARDINAL;      (* Register number *)
  44.                     Xn : CARDINAL;      (* Index Reg. nbr. *)
  45.                     Xsize : SizeType;   (* size of Index *)
  46.                     X : Xtype;          (* Is index Data or Address register? *)
  47.                  END;
  48.  
  49.  
  50.  
  51.    PROCEDURE GetValue (Operand : OPERAND; VAR Value : LONG);
  52.    (* determines value of operand (in Decimal, HEX, or via Symbol Table) *)
  53.  
  54.  
  55.    PROCEDURE GetSize (VAR Symbol : ARRAY OF CHAR; VAR Size : SizeType);
  56.    (* determines size of opcode: Byte, Word, or Long *)
  57.  
  58.    PROCEDURE GetAbsSize (VAR Symbol : ARRAY OF CHAR; VAR AbsSize : SizeType);
  59.    (* determines size of operand: Word or Long *)
  60.  
  61.    PROCEDURE GetInstModeSize (Mode : OpMode; Size : SizeType;
  62.                                  VAR InstSize : CARDINAL) : CARDINAL;
  63.    (* Determines the size for the various instruction modes.    *)
  64.  
  65.    PROCEDURE GetOperand (Oper : OPERAND; VAR Op : OpConfig);
  66.    (* Finds mode and value for source or destination operand *)
  67.  
  68.    PROCEDURE GetMultReg (Oper : OPERAND; PreDec : BOOLEAN;
  69.                          Loc : CARDINAL; VAR MultExt : BITSET);
  70.    (* Builds a BITSET marking each register used in a MOVEM instruction *)
  71.  
  72. END SyntaxAnalyzer.
  73.